// 导入仓库
import store from '../store'
// 导入工具函数 token
import { getToken, removeToken } from '../utils/local'
// 导入toast
import { Toast } from 'vant'
// 导入router
import router from '../router'
// 导入api
import { getUserInfo } from '../api/user'
// 暴露一个函数  接收一个Vue构造函数
export default function (Vue) {
  // console.log('执行啦!!!')
  // 为原型添加一个方法
  Vue.prototype.$checkLogin = function () {
    // console.log('登陆了没呀!!!!!!')
    // 返回promise对象
    return new Promise((resolve, reject) => {
      // 可以执行异步操作
      if (store.state.isLogin) {
        // 触发外部的.then
        resolve()
      } else {
        // 没登录 有token
        if (getToken()) {
          // 调用接口
          getUserInfo()
            .then(res => {
              // 成功
              // 仓库保存数据
              // 处理用户头像
              res.data.avatar = process.env.VUE_APP_URL + res.data.avatar
              // vuex中保存用户信息
              store.commit('SETUSERINFO', res.data)
              // vuex中保存登录状态
              store.commit('SETISLOGIN', true)
              // 触发外部的.then
              resolve()
            })
            .catch(() => {
              // 失败
              // 删除token
              removeToken()
              // 提示用户
              Toast.fail('请先登录')
              // 去登录页 调用时 this是vue实例
              router.push('/login?redirect=' + this.$route.fullPath)
              // 触发外部的.catch
              reject(new Error('请先登录'))
            })
        } else {
          // 提示用户
          Toast.fail('请先登录')
          // 去登录页 调用时 this是vue实例
          router.push('/login?redirect=' + this.$route.fullPath)
          // 触发外部的.catch
          reject(new Error('请先登录'))
        }
      }
      // resolve 对应到外部的.then
      // reject 对应到外部的.catch
    })
  }
}
